二叉树的创建和定义,递归和非递归的前序,中序和后序遍历。满二叉树和完全二叉树。二叉树的一些简单操作和应用。

二叉树的定义

我们先简单理解一下树,树就是N个结点的有限集。在任意一颗非空树中:有且仅有一个特定的称为根(Root)的结点。
二叉树是另一种树型结构,它的特点是每个结点至多只有两颗子树,所以二叉树中不存在度大于2的结点,并且,二叉树的子树有左右之分,其次序不能颠倒。两个结点共同的根节点叫做他们的双亲结点。
二叉树的结构体定义如下:

typedef char Data_Type;

typedef struct BTNode
{
    Data_Type data;
    struct BTNode * LeftNode;
    struct BTNode * RightNode;
}BTNode,*pBTNode;

所以二叉树每个结点都有一个data用来保存数据,还有两个指针,分别指向左右子树的根节点。
具体结构如下图:
这里写图片描述

二叉树的创建

将一个字符串或者数组创建为二叉树形式,下面以字符串为例子:

void CreateBinTree(BTNode** pRoot,char* str,int size,int* index)
{
    BTNode* pNewNode = NULL;
    if(*index < size && '#'!=str[*index])
    {
        pNewNode = BuyBTNode();
        pNewNode->data = str[*index];
        *pRoot = pNewNode;
        (*index)++;
        CreateBinTree(&(*pRoot)->LeftNode,str,size,index);
        (*index)++;
        CreateBinTree(&(*pRoot)->RightNode,str,size,index);
    }
}
/
char str[]="ABD###CE##F";
pBTNode pRoot;
int index = 0;
CreateBinTree(&pRoot,str,11,&index);

上面的方法是字符串以递增的顺序传参,用递归的方法,以前序遍历的顺序(下面的代码会详细讲解前序遍历),将字符串中每一个字母添加到二叉树中去,”#“号是为了让增加停下,构造二叉树的具体形状。具体递归结束后二叉树如下图:
这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值